//package com.yryp.gatep.module.controller
//
//import android.app.Service
//import android.content.Intent
//import android.os.IBinder
//import android.util.Base64
//import android.util.Log
//import com.alibaba.fastjson.JSON
//import com.alibaba.fastjson.TypeReference
//import com.blankj.utilcode.util.DeviceUtils
//import com.blankj.utilcode.util.ToastUtils
//import com.yryp.controller.Constant
//import com.xsz.pda.net.api.Api
//import com.yryp.controller.config.AppConfig
//import com.yryp.controller.config.CameraConfig
//import com.yryp.controller.config.model.ConfigModel
//import com.yryp.gatep.data.model.FaceModel
//import com.yryp.gatep.AppExecutors
//import com.yryp.gatep.module.data.MyFaceModel
//import com.yryp.lib.mq.Config
//import com.yryp.lib.mq.RabbitMq
//
//class MessageService : Service(){
//
//    private lateinit var rabbitMq: RabbitMq
//    private lateinit var configModel: ConfigModel
//    private lateinit var controlServerIp: String
//    private lateinit var serverIp: String
//    private lateinit var androidId: String
//    private lateinit var faceModel: MyFaceModel
//    private lateinit var binder: MessageBinder
//    private lateinit var api: Api
//
//
//    override fun onCreate() {
//        super.onCreate()
//        configModel = ConfigModel(this)
//        androidId = DeviceUtils.getAndroidID()
//        configModel.appConfig.let{
//            controlServerIp = it.controlServerIp
//            serverIp = it.ip
//        }
//        api= Api(controlServerIp)
//        faceModel = MyFaceModel(FaceModel(this),configModel)
//        register()
//
//        val config = Config
//            .Builder()
//            .hostName(controlServerIp)
//            .port(Constant.MQ_PORT)
//            .virtualHost(Constant.MQ_VHOST)
//            .exchangeName(Constant.MQ_EXCHANGE)
//            .serviceExchangeName(Constant.MQ_SERVICE_EXCHANGE)
//            .queueName(androidId)
//            .routingKey(androidId)
//            .userName(Constant.MQ_USER)
//            .password(Constant.MQ_PASSWD)
//            .autoAck(false)
//            .build()
//        rabbitMq = RabbitMq(config){ Log.e("RabbitMQ","connect -> $it") }
//        rabbitMq.init()
//        rabbitMq.setMsgListener(Constant.UPGRADE){ binder.onMessageAction?.onUpgrade(it) }
//        rabbitMq.setMsgListener(Constant.CONFIG_ALL){
//            ControllerUtils.configAll(it,configModel,api)
//            faceModel.deleteAllFace()
//            binder.onMessageAction?.onRestartApp()
//        }
//        rabbitMq.setMsgListener(Constant.CONFIG_FACE){
//            ControllerUtils.configFace(it,configModel,api)
//            binder.onMessageAction?.onRestartApp()
//        }
//        rabbitMq.setMsgListener(Constant.CONFIG_APP){
//            val appConfig = JSON.parseObject(it, AppConfig::class.java)
//            val oc = configModel.appConfig
//            binder.onMessageAction?.onGateNameChange(appConfig.deviceName)
//            appConfig.ip = oc.ip
//            appConfig.controlServerIp = oc.ip
//            appConfig.androidId = oc.androidId
//            configModel.saveAppConfig(appConfig)
//            ControllerUtils.saveToServer(configModel, api)
//            if (appConfig.projectId != oc.projectId){
//                faceModel.deleteAllFace()
//                binder.onMessageAction?.onRestartApp()
//            }
//        }
//        rabbitMq.setMsgListener(Constant.CONFIG_RFID){
//            ControllerUtils.configRfid(it, configModel, api)
//            binder.onMessageAction?.onRestartApp()
//        }
//        rabbitMq.setMsgListener(Constant.CONFIG_CAMERA){
//            ControllerUtils.configCamera(it, configModel, api)
//            binder.onMessageAction?.onCameraConfigChange(JSON.parseObject(it,CameraConfig::class.java))
//        }
//        rabbitMq.setMsgListener(Constant.CONFIG_VALIDATE){
//            ControllerUtils.configValidate(it, configModel, api)
//            binder.onMessageAction?.onRestartApp()
//        }
//        rabbitMq.setMsgListener(Constant.CONFIG_AUTO_RESTART){
//            val autoRestartApp = it!!.toBoolean()
//            ControllerUtils.configAutoRestart(autoRestartApp, configModel, api)
//            binder.onMessageAction?.onConfigAutoRestart(autoRestartApp)
//        }
//        rabbitMq.setMsgListener(Constant.SYNC_FACE_DEL_ALL){
//            faceModel.deleteAllFace()
//            binder.onMessageAction?.onRestartApp()
//            ToastUtils.showShort("删除了所有人脸")
//        }
//        rabbitMq.setMsgListener(Constant.SYNC_FACE_DEL){data->
//            val ticket = JSON.parseObject<Map<String,String>>(data, object :
//                TypeReference<Map<String, String>>(){}.type)
//            var ids: List<String> = ArrayList()
//            ticket["qrcode"]?.let {
//                ids = faceModel.deleteByQrcode(qrcode = it)
//            }
//            ticket["rfid"]?.let {
//                ids = faceModel.deleteByRfid(rfid = it)
//            }
//            ticket["ids"]?.let {
//                ids = JSON.parseArray(it,String::class.java)
//                faceModel.detelete(ids)
//            }
//        }
//        rabbitMq.setMsgListener(Constant.SYNC_FACE_ADD){data->
//            val faceInfo = JSON.parseObject<Map<String, String>>(data,object : TypeReference<Map<String, String>>() {}.type)
//            faceInfo["id"]?.let {
//                val feature = Base64.decode(faceInfo["feature64"] ?: "", Base64.DEFAULT)
//                val pid = faceInfo["pid"] ?: "1"
//                val qrcode = faceInfo["qrcode"]
//                val rfid = faceInfo["rfid"]
//                faceModel.saveSyncData(it,pid,feature,qrcode,rfid)
//                AppExecutors.networkIO.execute{
//                    faceModel.loadFace(it)
//                }
//            }
//        }
//    }
//
//    override fun onBind(intent: Intent?): IBinder{
//        binder =  MessageBinder()
//        return binder
//    }
//
//
//    //注册到控制系统
//    private fun register(){
//        api.register(androidId,configModel.appConfig.deviceName ?:"", {
//            ControllerUtils.saveToServer(configModel,api)
//        }, {
//            AppExecutors.networkIO.execute{
//                Thread.sleep(2000)
//                register()
//            }
//        })
//    }
//}